package _12.herenciaYaccesoAatributos.otroPaquete;

import _12.herenciaYaccesoAatributos.ClasePadre;

public class ClaseHija extends ClasePadre {
	public static void main(String[] args) {
		ClasePadre cp = new ClasePadre();
		ClaseHija ch = new ClaseHija();
		accedeConInstanciaHija(ch);
		accedeConInstanciaPadre(cp);

	}

	private static void accedeConInstanciaPadre(ClasePadre cp) {

		/**
		 * PRIVATE
		 */
		// The field ClasePadre.variableDefault is not visible
		// cp.variablePrivate;

		/**
		 * DEFAULT
		 */
		// The field ClasePadre.variableDefault is not visible
		// Integer valor = cp.variableDefault;

		/**
		 * PROTECTED
		 */
		// The field ClasePadre.variableDefault is not visible

		// Si una clase hija en diferente paquete que el padre, instancia un
		// objeto de la clase padre, no aa a poder acceder a los miembros
		// (variables de instancia y métodos) de la clase padre si estas están
		// con modificador de acceso: protected... 1P
		// Integer valorProtected = cp.variableProtected;

		/**
		 * PUBLIC
		 */

		// Syntax error, insert "AssignmentOperator Expression" to complete
		// Expression
		// Obliga a asignar a un valor.
		// n.variablePublic;

		Integer valorPublic = cp.variablePublic;
	}

	static private void accedeConInstanciaHija(ClaseHija ch) {

		/**
		 * PRIVATE
		 */
		// The field NivelDeAcceso.variablePrivate is not visible
		// cp.variablePrivate;

		/**
		 * DEFAULT
		 */
		// The field ClasePadre.variableDefault is not visible
		// Integer valor = ch.variableDefault;

		/**
		 * PROTECTED
		 */
		// ... 1P.- Pero si instancio la clase hija, puedo acceder a, a través
		// de la herencia, a esa variable que está protegida.

		Integer valorProtected = ch.variableProtected;

		/**
		 * PUBLIC
		 */

		// Syntax error, insert "AssignmentOperator Expression" to complete
		// Expression
		// Obliga a asignar a un valor.
		// n.variablePublic;

		Integer valorPublic = ch.variablePublic;

	}

}
